/*
* leetcode 24. 两两交换链表中的节点
*
给你一个链表，两两交换其中相邻的节点，并返回交换后链表的头节点。
你必须在不修改节点内部的值的情况下完成本题（即，只能进行节点交换）。
* */
/*
* */
import java.util.*;
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null||head.next==null)return head;
        ListNode l=head,r=head.next,p=new ListNode(-1);
        p.next=r;
        head=p;
        ListNode prev=p;
        while(l!=null&&l.next!=null){
            r=l.next;
            prev.next=r;
            l.next=r.next;
            r.next=l;
            prev=l;
            l=l.next;
        }
        return head.next;
    }
}

class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}